<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // var a = 1;
    // var b = 2;
    // var c = a + b;

    function add() {
        var a = 1;
        var b = 2;
        var c = a + b;
        return c;
    }

    function add(a, b) {
        // var a = 1;
        // var b = 2;
        var c = a + b;
        return c;
    }

</script>
<script>
    // 回调函数(callback) => 把函数当成参数(此时函数作为实参)传到另一个函数中 让它在另一个函数中执行

    // setInterval(function () {
    //     console.log(111);
    // }, 1000);

    // document.addEventListener('click', function () {
    //     alert(1111);
    // })

    // var list = [1, 4, 7, 2, 5, 8, 3, 6, 9];
    // list.forEach(function (item, index, array) {
    //     console.log(item, index, array);
    // })


    // 自己实现一个回调函数

    // (1) 函数嵌套 => 此案方法都写在函数内部 => 函数内没有的方法=> 无法执行
    // function doSomeThing() {
    //     function sing() {
    //         console.log("唱歌");
    //     }
    //     function dance() {
    //         console.log("跳舞");
    //     }
    //     function rap() {
    //         console.log("rap");
    //     }

    //     sing();
    // }

    // doSomeThing();


    // 回调函数
    function sing() {
        console.log("唱歌");
    }
    function dance() {
        console.log("跳舞");
    }
    function rap() {
        console.log("rap");
    }
    function basketball() {
        console.log("basketball");
    }

    // 理解:
    // 1. 函数也是一个特殊的对象 -> 引用类型(函数名/变量名引用该函数)
    // 2. 用户可以按照自己的需求 => 传入一个函数(执行内容多样化)
    // 3. 函数作为实际参数传入到另一个函数时,并不会立即执行, 而是需要在另一个函数中通过形参调用时才会执行 (锦囊妙计)

    function doSomeThing(fn) { // fn形参 接收函数
        // fn = sing;  浅复制 => fn和sing引用同一片内存空间 调用fn()  => sing()
        // fn = function () {
        //     console.log("学习");
        // }
        fn();
    }

    doSomeThing(sing);
    doSomeThing(function () {
        console.log("学习");
    });



</script>

</html>